# 一共有7个代码文件，每个文件对应一个最能体现的原则，请找出每个原则对应的代码文件，然后分析该代码文件是如何体现该原则的。

# 请将文件名修改为相应的原则名称，如：1.单一职责原则.py。并回答以下问题。然后将代码文件上传到之前实验创建的码云仓库中。
# 将码云代码仓库里新建文件夹code_snippets，将代码文件放入该文件夹中。

# 1.运行代码
# 输出如下：
#Title: The Catcher in the Rye, Author: J.D. Salinger, ISBN: 1234567890
#Book is available in stock.

# 2. 指出该代码体现了哪个原则
# 体现了单一职责原则（Single Responsibility Principle, SRP）

# 3. 请说明该代码是如何体现该原则
#每个类都只承担了一个职责。
#Book 类现在只负责表示书籍的基本信息，即它的职责是作为一个数据容器来存储和提供书籍的详细信息。
#BookDisplay 类负责显示书籍信息，它接收一个 Book 对象作为参数，并打印出该书籍的详细信息。
#InventoryManager 类负责管理库存，它包含了添加书籍、检查可用性和更新数量的方法。这些方法与库存管理的职责紧密相关。


#以下是违背了某原则的代码
class Book:
    def __init__(self, title, author, isbn, quantity):
        self.title = title
        self.author = author
        self.isbn = isbn
        self.quantity = quantity

    def display_book_info(self):
        print(f'Title: {self.title}, Author: {self.author}, ISBN: {self.isbn}')

    def check_availability(self):
        return self.quantity > 0

    def update_quantity(self, amount):
        self.quantity += amount

# 以下是对以上代码的重构以体现该原则。
class Book:
    def __init__(self, title, author, isbn):
        self.title = title
        self.author = author
        self.isbn = isbn

class BookDisplay:
    def display_book_info(self, book):
        print(f'Title: {book.title}, Author: {book.author}, ISBN: {book.isbn}')

class InventoryManager:
    def __init__(self):
        self.stock = {}

    def add_book(self, book, quantity):
        self.stock[book.isbn] = self.stock.get(book.isbn, 0) + quantity

    def check_availability(self, book):
        return self.stock.get(book.isbn, 0) > 0

    def update_quantity(self, book, amount):
        if book.isbn in self.stock:
            self.stock[book.isbn] += amount
        else:
            self.stock[book.isbn] = amount

# 代码使用示例
book = Book("The Catcher in the Rye", "J.D. Salinger", "1234567890")
display = BookDisplay()
inventory = InventoryManager()

# 添加书籍到库存
inventory.add_book(book, 10)

# 显示书籍信息
display.display_book_info(book)

# 检查库存
if inventory.check_availability(book):
    print("Book is available in stock.")
else:
    print("Book is out of stock.")

